#ifndef __ROBOT_H__
#define __ROBOT_H__

#include <vector>
using std::vector;
#include "Rotatie.h"
#include <string>
#include <string>
using std::string;

//! Een robot met 9 registers
/*!
  \author	Kenneth Venken
			Maarten Lambert
*/


class Kaart;

class Positie
{
public:
	Positie(int _x, int _y)
		: x(_x), y(_y) {}
	int x;
	int y;
};

class Robot
{
public:
	Robot(const string &color);

	// set vars
	void setPositie(int x, int y);
	Positie getPositie() const { return Positie(m_x, m_y);}
	void setRotatie(Rotatie rotatie);
	const Rotatie& getRotatie() const { return m_rotatie; }
	void setSchade(int schade);
	int getSchade() const { return m_schade; }
	void setLevens(int levens);
	void setCheckPoint(int checkPoint);

	Positie achter()
	{
		switch(m_rotatie)
		{
		case BOVEN: return Positie(m_x, m_y-1);
		case ONDER: return Positie(m_x, m_y+1);
		case LINKS: return Positie(m_x-1, m_y);
		case RECHTS: return Positie(m_x+1, m_y);
		}
	}
	Positie voor()
	{
		switch(m_rotatie)
		{
		case BOVEN: return Positie(m_x, m_y+1);
		case ONDER: return Positie(m_x, m_y-1);
		case LINKS: return Positie(m_x+1, m_y);
		case RECHTS: return Positie(m_x-1, m_y);
		}
	}

	// get vars
	const vector<Kaart*> getRegisters(); // returned registers
	int getX() const { return m_x;}
	int getY() const { return m_y;}
	const string& getColor() const { return m_color; }


	// voeg kaart toe
	void addKaart(Kaart *);
	
	int getNextCheckpoint() { return m_checkPoints; }

private:
	//! De 5 programmeerbare registers van de robot
	vector<	Kaart* > m_registers;

	int m_x; //posX
	int m_y; //posY
	Rotatie m_rotatie;

	int m_levens; // overige levens
	int m_schade; // schadepunten
	int m_checkPoints; // aantal checkpoints reeds gepasseerd

	string m_color;


	

};

#endif
